package gui;

import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.statistics.HistogramDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;

import base.ConjuntoEMail;

import dados.LeitorDados;
import dados.SeparadorDados;

public class Histograma extends ApplicationFrame {
	static Random random = new Random();
	private static String titulo;
	private double[] dados;
	
	public Histograma(String titulo, double[] dados, int shift) {
		super(titulo);
		this.titulo = titulo;
		this.dados = dados;
		IntervalXYDataset dataset = createDataset(dados,shift);
		JFreeChart chart = createChart(dataset, titulo);
		ChartPanel chartPanel = new ChartPanel(chart);
		chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
		chartPanel.setMouseZoomable(true, false);
		setContentPane(this.createPanel(titulo, dados, shift));
	}
			
	private static IntervalXYDataset createDataset(double[] dados, int shift) {
		HistogramDataset dataset = new HistogramDataset();
		/*double[] valores = new double[dados.length];
		for(int i = 0; i < dados.length; i++) {
			valores[i] = dados[i].getValor();
		}*/
		
		/*double k = Math.sqrt(dados.length);
		double maiorValor = dados[0];
		double menorValor = dados[0];
		for(int i = 0; i < dados.length; i++) {
			if(dados[i] > maiorValor) maiorValor = dados[i];
			if(dados[i] < menorValor) menorValor = dados[i];
		}
		double amplitudeTotal = maiorValor - menorValor;
		int kArredondado = (int)Math.ceil(k);
		double amplitudeClasses = amplitudeTotal/kArredondado;*/ //oh yeah baby!!!	
		//dataset.setType(HistogramType.FREQUENCY);
		dataset.addSeries(titulo,dados, shift);
		return dataset;
	}
	
	public static JPanel createPanel(String titulo, double[] dados, int shift) {
		JFreeChart jfreechart = createChart(createDataset(dados, shift), titulo);
		jfreechart.setBackgroundPaint(Color.white);
		return new ChartPanel(jfreechart);
	}
	
	private static JFreeChart createChart(IntervalXYDataset dataset,
			String titulo) {
		JFreeChart chart = ChartFactory.createHistogram(titulo, null, null,
				dataset, PlotOrientation.VERTICAL, true, false, false);
		chart.getXYPlot().setForegroundAlpha(0.75f);
		try {
			ChartUtilities.saveChartAsJPEG(new File("S:\\histogramaMake.jpg"),chart,500,300);
		} 
		catch (IOException e) {
			e.printStackTrace();
		}
		return chart;
	}
	
	/*private static double[] gaussianData(int size, double shift) {
		double[] d = new double[size];
		for (int i = 0; i < d.length; i++) {
			d[i] = random.nextGaussian() + shift;
		}
		return d;
	}*/
	
	/*public static void main(String[] args){
		String make = "Make";
		//double[] dados = {10,50,12.3,37.7,50,98,54,45,78,65};
		//int x = 4;
		//Histograma teste = new Histograma(make,dados,5);
		//private SeparadorDados x = new SeparadorDados();
		SeparadorDados j = new SeparadorDados();
		LeitorDados leitor = new LeitorDados();
		ConjuntoEMail emails = new ConjuntoEMail();
		emails = leitor.processar();
		Double[] dados = j.retornaDados(SeparadorDados.TIPO_SPAM,SeparadorDados.FREQMAKE,emails);
		int qtdClasses = (int)Math.ceil(1+(3.22*Math.log10(dados.length)));
		double[] x = new double[dados.length];
		for(int i = 0; i< dados.length;i++){
			x[i] = dados[i];
		}
		Histograma teste = new Histograma("Make",x,qtdClasses);
		teste.pack();
		teste.setVisible(true);
	}*/
}  //  @jve:decl-index=0:visual-constraint="99,47"
